package com.ushine.web.base.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ushine.web.base.model.system.PostDO;
import com.ushine.web.base.model.system.UserDO;
import com.ushine.web.component.page.PageRequestQuery;

import java.util.List;
import java.util.Optional;
import java.util.Set;

/**
 * @Author: yls
 * @Date: 2022/03/01 09:42
 * @Description: 岗位接口
 * @Version 1.0
 */
public interface IPostService {

    /**
     * 功能描述:
     * 〈 添加岗位 〉
     *
     * @param post 岗位实体类
     * @return : java.lang.Boolean
     * @author : yls
     * @date : 2022/03/01 10:46
     */
    Boolean insertPost(PostDO post);

    /**
     * 功能描述:
     * 〈根据id获取岗位 〉
     *
     * @param id 岗位id
     * @return : java.util.Optional<com.ushine.web.base.model.system.PostDO>
     * @author : yls
     * @date : 2022/03/01 09:47
     */
    Optional<PostDO> getPostById(Long id);

    /**
     * 功能描述:
     * 〈根据岗位名称获取岗位 〉
     *
     * @param postName 岗位名称
     * @return : java.util.Optional<com.ushine.web.base.model.system.PostDO>
     * @author : yls
     * @date : 2022/03/01 09:47
     */
    Optional<PostDO> getPostByPostName(String postName);


    /**
     * 功能描述:
     * 〈 查询岗位集合 〉
     *
     * @param ids id集合
     * @return : java.util.List<com.ushine.web.base.model.system.PostDO>
     * @author : yls
     * @date : 2022/03/01 09:58
     */
    List<PostDO> listPosts(Set<Long> ids);

    /**
     * 功能描述:
     * 〈查询岗位集合: 多线程，带数据权限〉
     *
     * @param user 用户信息
     * @param ids  id集合
     * @return : java.util.List<com.ushine.web.base.model.system.PostDO>
     * @author : yls
     * @date : 2022/3/8 15:54
     */
    List<PostDO> listPostsByThread(UserDO user, Set<Long> ids);

    /**
     * 功能描述:
     * 〈 分页查询岗位 〉
     *
     * @param pageRequestQuery 分页查询条件
     * @return : com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.ushine.web.base.model.system.PostDO>
     * @author : yls
     * @date : 2022/03/01 11:00
     */
    Page<PostDO> listPostsByPage(PageRequestQuery<PostDO> pageRequestQuery);

}
